
/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
 *
 * 
 * @param proot TreeNode类 
 * @param k int整型 
 * @return int整型
 */
 function KthNode( proot ,  k ) {
  // write code here
  // 首先定义一个变量记录当前是第几个节点
  var count = 0
  // 二叉搜索树 的第k个小的节点 可以让二叉搜索树先做后中再右遍历
  function findNode(root){
    if(root === null) return  // 如果这个节点是null 就return 出去什么都不做
    var left = findNode(root.left) // 否则遍历左节点 得到遍历左节点后的值
    if(left) return left // 如果左节点存在就返回左节点
    count ++ // 否则的话计数器++ 因为遍历到中节点了
    if(count === k){ // 如果找到了这个节点 就返回这个节点的值
      return root.val 
    }
    // 然后遍历右子树 
    var right = findNode(root.right) // 遍历右子树 得到遍历右子树的值
    if(right){
      return right
    }
  }
  // 如果输入的根节点是null return -1
  if(proot === null) return -1
  // 如果输入的数字 大于数的长度  就return -1
  var res = findNode(proot) // 如果res不为null 说明找到了 那就返回res 就行了 如果res 是为定义 就返回-1
  return res ? res : -1
}
module.exports = {
  KthNode : KthNode
};